package main

import "fmt"

// new 和make的区别
/*
new和make都是用来分配内存的，但是他们的使用场景是不同的。

new用于分配值类型（int、float、bool、string、array、struct）的内存，返回的是指向该类型的指针。new分配的内存被初始化为零值。

make用于分配引用类型（slice、map、channel）的内存，并初始化它们。make返回的是引用类型本身，而不是	指针。

new() 用于创建任意类型的变量，而 make() 仅用于创建引用类型的变量。
new() 返回的是指针，而 make() 返回的是初始化后的值。
new() 创建的变量是零值，make() 创建的变量是根据类型进行初始化。
*/
func main() {
	// 使用 new() 创建一个结构体的指针
	personPtr := new(Person)
	personPtr.Name = "Alice"
	personPtr.Age = 30

	fmt.Println(*personPtr) // 输出 &{Alice 30}

	// 使用 make() 创建一个映射，并初始化键值对
	m := make(map[string]int)
	m["one"] = 1
	m["two"] = 2

	fmt.Println(m) // 输出 map[one:1 two:2]

	items := [...]int{10, 20, 30, 40, 50}
	for _, item := range items {
		item *= 2
	}
	fmt.Println(items) // 输出 [10 20 30 40 50]

	//如何实现for循环让切片的值翻倍
	for i := range items {
		items[i] *= 2
	}
	fmt.Println(items) // 输出 [20 40 60 80 100]
}

type Person struct {
	Name string
	Age  int
}
